/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.camachosanchez.gui;

import com.camachosanchez.bean.Baterias;
import com.camachosanchez.bean.Vehiculos;
import com.camachosanchez.controler.jdbc.BateriasJdbcControler;
import com.camachosanchez.controler.jpa.BateriasJpaController;
import com.camachosanchez.gui.table.ModeloTablaBuscarBateria;
import com.camachosanchez.gui.table.RenderizadorTablaBaterias;
import com.camachosanchez.gui.table.TableSorter;
import com.camachosanchez.util.EstadosJDialog;
import com.camachosanchez.util.GUIUtil;
import com.camachosanchez.util.ReportUtil;
import com.camachosanchez.util.SQLUtil;
import java.util.List;
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;
import javax.swing.WindowConstants;
import javax.swing.event.InternalFrameEvent;
import javax.swing.table.DefaultTableModel;
import net.coderazzi.filters.gui.TableFilterHeader;

/**
 *
 * @author ZULLY
 */
public class BusquedaBateria extends javax.swing.JInternalFrame {

    private ModeloTablaBuscarBateria modelo;
    private TableFilterHeader filterHeader;
    private TableSorter tableSorter;
    /**
     * Creates new form BusquedaBateria
     */
    public BusquedaBateria() {
        initComponents();
        setFrameIcon(new ImageIcon(getClass().getResource("/com/camachosanchez/recursos/table.png")));
        this.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
        this.addInternalFrameListener(new javax.swing.event.InternalFrameAdapter() {

            @Override
            public void internalFrameClosing(InternalFrameEvent e) {
                cerrar();
            }
        });

        modelo = new ModeloTablaBuscarBateria();
        tableSorter = new TableSorter(modelo, tblBaterias.getTableHeader());
        tblBaterias.setModel(tableSorter);
        filterHeader = new TableFilterHeader();
        filterHeader.setTable(tblBaterias);
        RenderizadorTablaBaterias render = new RenderizadorTablaBaterias();
        tblBaterias.setDefaultRenderer(Class.class, render);
        tblBaterias.getTableHeader().setReorderingAllowed(false);
    }

    private void cerrar() {
        GUIUtil.maximizarTodasLasVentanas(this);
    }

    private void setColumnaOculta() {
        tblBaterias.getColumnModel().getColumn(1).setMinWidth(0);
        tblBaterias.getColumnModel().getColumn(1).setMaxWidth(0);
        tblBaterias.getColumnModel().getColumn(1).setPreferredWidth(0);
    }
    
    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        pnlContenedor = new javax.swing.JPanel();
        scrContenedor = new javax.swing.JScrollPane();
        tblBaterias = new javax.swing.JTable();
        toolBarPrincipal = new javax.swing.JToolBar();
        jLabel1 = new javax.swing.JLabel();
        btnNuevo = new javax.swing.JButton();
        jSeparator4 = new javax.swing.JToolBar.Separator();
        btnActualizar = new javax.swing.JButton();
        jSeparator5 = new javax.swing.JToolBar.Separator();
        btnVerDetalle = new javax.swing.JButton();
        jSeparator1 = new javax.swing.JToolBar.Separator();
        btnVerUbicacion = new javax.swing.JButton();
        jSeparator3 = new javax.swing.JToolBar.Separator();
        btnVerHistorial = new javax.swing.JButton();
        jSeparator2 = new javax.swing.JToolBar.Separator();
        jButton1 = new javax.swing.JButton();
        jSeparator6 = new javax.swing.JToolBar.Separator();
        btnEliminar = new javax.swing.JButton();

        setClosable(true);
        setDefaultCloseOperation(javax.swing.WindowConstants.HIDE_ON_CLOSE);
        setIconifiable(true);
        setMaximizable(true);
        setResizable(true);
        setTitle(".:: Gestión de Baterías::.");
        try {
            setSelected(true);
        } catch (java.beans.PropertyVetoException e1) {
            e1.printStackTrace();
        }

        pnlContenedor.setLayout(new java.awt.BorderLayout(5, 5));

        tblBaterias.setToolTipText("");
        tblBaterias.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
        tblBaterias.setRowHeight(22);
        tblBaterias.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
        scrContenedor.setViewportView(tblBaterias);

        pnlContenedor.add(scrContenedor, java.awt.BorderLayout.CENTER);

        getContentPane().add(pnlContenedor, java.awt.BorderLayout.CENTER);

        toolBarPrincipal.setBackground(new java.awt.Color(255, 255, 255));
        toolBarPrincipal.setBorder(javax.swing.BorderFactory.createEtchedBorder());
        toolBarPrincipal.setFloatable(false);
        toolBarPrincipal.setRollover(true);
        toolBarPrincipal.setMinimumSize(new java.awt.Dimension(385, 30));
        toolBarPrincipal.setPreferredSize(new java.awt.Dimension(409, 30));

        jLabel1.setText(" ");
        toolBarPrincipal.add(jLabel1);

        btnNuevo.setBackground(new java.awt.Color(255, 255, 255));
        btnNuevo.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/camachosanchez/recursos/16_new.png"))); // NOI18N
        btnNuevo.setText("Nuevo");
        btnNuevo.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
        btnNuevo.setFocusable(false);
        btnNuevo.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
        btnNuevo.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        btnNuevo.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnNuevoActionPerformed(evt);
            }
        });
        toolBarPrincipal.add(btnNuevo);
        toolBarPrincipal.add(jSeparator4);

        btnActualizar.setBackground(new java.awt.Color(255, 255, 255));
        btnActualizar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/camachosanchez/recursos/16_update.png"))); // NOI18N
        btnActualizar.setText("Actualizar");
        btnActualizar.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
        btnActualizar.setFocusable(false);
        btnActualizar.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
        btnActualizar.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        btnActualizar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnActualizarActionPerformed(evt);
            }
        });
        toolBarPrincipal.add(btnActualizar);
        toolBarPrincipal.add(jSeparator5);

        btnVerDetalle.setBackground(new java.awt.Color(255, 255, 255));
        btnVerDetalle.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/camachosanchez/recursos/16_detail.png"))); // NOI18N
        btnVerDetalle.setText("Ver Detalle");
        btnVerDetalle.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
        btnVerDetalle.setFocusable(false);
        btnVerDetalle.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
        btnVerDetalle.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        btnVerDetalle.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnVerDetalleActionPerformed(evt);
            }
        });
        toolBarPrincipal.add(btnVerDetalle);
        toolBarPrincipal.add(jSeparator1);

        btnVerUbicacion.setBackground(new java.awt.Color(255, 255, 255));
        btnVerUbicacion.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/camachosanchez/recursos/16_location.png"))); // NOI18N
        btnVerUbicacion.setText("Ver Ubicación");
        btnVerUbicacion.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
        btnVerUbicacion.setFocusable(false);
        btnVerUbicacion.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
        btnVerUbicacion.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        btnVerUbicacion.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnVerUbicacionActionPerformed(evt);
            }
        });
        toolBarPrincipal.add(btnVerUbicacion);
        toolBarPrincipal.add(jSeparator3);

        btnVerHistorial.setBackground(new java.awt.Color(255, 255, 255));
        btnVerHistorial.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/camachosanchez/recursos/16_historial.png"))); // NOI18N
        btnVerHistorial.setText("Ver Historial");
        btnVerHistorial.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
        btnVerHistorial.setFocusable(false);
        btnVerHistorial.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
        btnVerHistorial.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        btnVerHistorial.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnVerHistorialActionPerformed(evt);
            }
        });
        toolBarPrincipal.add(btnVerHistorial);
        toolBarPrincipal.add(jSeparator2);

        jButton1.setBackground(new java.awt.Color(255, 255, 255));
        jButton1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/camachosanchez/recursos/excel.png"))); // NOI18N
        jButton1.setText("Exportar");
        jButton1.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
        jButton1.setFocusable(false);
        jButton1.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
        jButton1.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });
        toolBarPrincipal.add(jButton1);
        toolBarPrincipal.add(jSeparator6);

        btnEliminar.setBackground(new java.awt.Color(255, 255, 255));
        btnEliminar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/camachosanchez/recursos/16_delete.png"))); // NOI18N
        btnEliminar.setText("  Eliminar  ");
        btnEliminar.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
        btnEliminar.setFocusable(false);
        btnEliminar.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
        btnEliminar.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        btnEliminar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnEliminarActionPerformed(evt);
            }
        });
        toolBarPrincipal.add(btnEliminar);

        getContentPane().add(toolBarPrincipal, java.awt.BorderLayout.PAGE_START);

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void btnVerDetalleActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnVerDetalleActionPerformed
        // TODO add your handling code here:
        int fila = tblBaterias.getSelectedRow();
        if (fila > -1) {
            int id = Integer.parseInt(tblBaterias.getValueAt(fila, 1).toString());
            BateriasJpaController dao_bateria = new BateriasJpaController(null);
            EditorBateria editor = new EditorBateria(this, Principal.getInstance(), true, dao_bateria.findBaterias(id), fila);
            editor.setEstado(EstadosJDialog.EstadoJDialog.MODIFICAR);
            editor.setVisible(true);
        } else {
            JOptionPane.showMessageDialog(this, "Debe seleccionar una batería.", "Advertencia", JOptionPane.WARNING_MESSAGE);
        }
    }//GEN-LAST:event_btnVerDetalleActionPerformed

    private void btnVerUbicacionActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnVerUbicacionActionPerformed
        // TODO add your handling code here:
        int fila = tblBaterias.getSelectedRow();
        if (fila > -1) {
            int idBateria = Integer.parseInt(tblBaterias.getValueAt(fila, 1).toString());
            String categoria = tblBaterias.getValueAt(fila, 5).toString();
            if (categoria.length() > 7 && categoria.substring(0, 7).equalsIgnoreCase("Montado")) {
                Vehiculos v = SQLUtil.getUnidadMontadaDeBateria(idBateria);
                if(v != null){
                    MontajeDesmontaje montaje = new MontajeDesmontaje(v);
                    montaje.setIdBateriaResaltada(idBateria);
                    montaje.setSize(Principal.getInstance().getEscritorio().getSize());
                    Principal.getInstance().getEscritorio().add(montaje);
                    montaje.setPosiciones(true);
                    montaje.setVisible(true);
                    montaje.generarEsquemaMontaje();
                    montaje.agregarDescripcionNeumaticos();
                    try {
                        montaje.setMaximum(true);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            } else {
                JOptionPane.showMessageDialog(this, "La vista no está disponible. La batería no está montada en ninguna unidad.");
            }
        } else {
            JOptionPane.showMessageDialog(this, "Debe seleccionar una batería.", "Advertencia", JOptionPane.WARNING_MESSAGE);
        }
    }//GEN-LAST:event_btnVerUbicacionActionPerformed

    private void btnVerHistorialActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnVerHistorialActionPerformed
        // TODO add your handling code here:
        int fila = tblBaterias.getSelectedRow();
        if (fila > -1) {
            int id = Integer.parseInt(tblBaterias.getValueAt(fila, 1).toString());
            String codigo = tblBaterias.getValueAt(fila, 2).toString();
            HistorialBateria historial = new HistorialBateria(Principal.getInstance(), true, id, codigo);
            historial.setVisible(true);
        } else {
            JOptionPane.showMessageDialog(this, "Debe seleccionar una batería.", "Advertencia", JOptionPane.WARNING_MESSAGE);
        }
    }//GEN-LAST:event_btnVerHistorialActionPerformed

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
        // TODO add your handling code here:
        DefaultTableModel modeloParaExportacion = new DefaultTableModel() {
        @Override
        public String getColumnName(int columnIndex) {
                switch (columnIndex) {
                    case 0:
                    return "CÓDIGO";
                    case 1:
                    return "MARCA";
                    case 2:
                    return "N° DE PLACAS";
                    case 3:
                    return "UBICACIÓN";
                    case 4:
                    return "FECHA MONTAJE";
                    case 5:
                    return "DISTRIBUIDOR";
                    default:
                    return "";
                }
            }

            @Override
            public int getColumnCount() {
                return 6;
            }
        };
        int numeroFilas = tblBaterias.getRowCount();
        for (int i = 0; i < numeroFilas; i++) {
            Object[] fila = new Object[6];
            for (int j = 2, k = 0; j < 8; j++, k++) {
                fila[k] = tblBaterias.getValueAt(i, j);
            }
            modeloParaExportacion.addRow(fila);
        }
        modeloParaExportacion.setRowCount(numeroFilas);
        try {
            ReportUtil.generarReporteExcel("reportes/baterias_" + GUIUtil.obtenerFechaDDMMYYYHHMMSS() + ".xls", modeloParaExportacion);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }//GEN-LAST:event_jButton1ActionPerformed

    private void btnEliminarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnEliminarActionPerformed
        // TODO add your handling code here:
        int fila = tblBaterias.getSelectedRow();
        if (fila > -1) {
            if (JOptionPane.showConfirmDialog(null, "¿Está seguro que desea eliminar la batería seleccionada?", "Confirmación", JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) {
                int id = Integer.parseInt(tblBaterias.getValueAt(fila, 1).toString());
                BateriasJdbcControler daoJdbc = new BateriasJdbcControler();
                byte estado = daoJdbc.eliminarBateria(id);
                if (estado == 1) {
                    JOptionPane.showMessageDialog(this, "La batería se encuentra relacionada con otros registros, no puede ser eliminado.", "Error en la eliminación", JOptionPane.ERROR_MESSAGE);
                } else {
                    JOptionPane.showMessageDialog(this, "La batería se ha eliminado de forma segura.", "Operación finalizada", JOptionPane.INFORMATION_MESSAGE);
                    this.borrarBateria(fila);
                }
            }
        } else {
            JOptionPane.showMessageDialog(this, "Debe seleccionar una batería.", "Advertencia", JOptionPane.WARNING_MESSAGE);
        }
    }//GEN-LAST:event_btnEliminarActionPerformed

    private void btnNuevoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnNuevoActionPerformed
        // TODO add your handling code here:
        EditorBateria registro = new EditorBateria(this, Principal.getInstance(), true, null, 0);
        registro.setEstado(EstadosJDialog.EstadoJDialog.NUEVO);
        registro.setVisible(true);
    }//GEN-LAST:event_btnNuevoActionPerformed

    private void btnActualizarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnActualizarActionPerformed
        llenarTabla();
    }//GEN-LAST:event_btnActualizarActionPerformed

    public void inicializarTabla() {
        final DialogoCargando dlgCargando = new DialogoCargando(Principal.getInstance(), true);
        Thread hilo = new Thread() {

            @Override
            public void run() {
                try {
                    llenarTabla();
                } catch (Exception e) {
                    e.printStackTrace();
                } finally {
                    dlgCargando.dispose();
                }
            }
        };
        hilo.start();
        dlgCargando.setVisible(true);
    }
    
    public void llenarTabla() {
        modelo.limpiar();
        BateriasJdbcControler daoJdbc = new BateriasJdbcControler();
        List<Baterias> baterias = daoJdbc.findAll();
        for (Baterias b : baterias) {
            modelo.agregarBateria(b);
        }
        setColumnaOculta();
        GUIUtil.SetAnchoColumnas(tblBaterias);
    }

    public void borrarBateria(int fila) {
        modelo.borrarAccion(fila);
    }

    public void actualizarBateria(Baterias b, int fila) {
        modelo.actualizarBateria(b, fila);
        setColumnaOculta();
        GUIUtil.SetAnchoColumnas(tblBaterias);
    }
    
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnActualizar;
    private javax.swing.JButton btnEliminar;
    private javax.swing.JButton btnNuevo;
    private javax.swing.JButton btnVerDetalle;
    private javax.swing.JButton btnVerHistorial;
    private javax.swing.JButton btnVerUbicacion;
    private javax.swing.JButton jButton1;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JToolBar.Separator jSeparator1;
    private javax.swing.JToolBar.Separator jSeparator2;
    private javax.swing.JToolBar.Separator jSeparator3;
    private javax.swing.JToolBar.Separator jSeparator4;
    private javax.swing.JToolBar.Separator jSeparator5;
    private javax.swing.JToolBar.Separator jSeparator6;
    private javax.swing.JPanel pnlContenedor;
    private javax.swing.JScrollPane scrContenedor;
    private javax.swing.JTable tblBaterias;
    private javax.swing.JToolBar toolBarPrincipal;
    // End of variables declaration//GEN-END:variables
}
